package dao;

import common.model.Entity.User;

import java.util.Optional;

/**
 * 用户数据访问接口
 * 继承自通用BaseDao，提供针对User实体的数据库操作
 */
public interface UserDao extends BaseDao<User, Long> {

    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return Optional<User> 包含查询结果，如果不存在则为空
     */
    Optional<User> findByUsername(String username);

    /**
     * 根据邮箱查询用户
     * @param email 用户邮箱
     * @return Optional<User> 包含查询结果，如果不存在则为空
     */
    Optional<User> findByEmail(String email);

    /**
     * 检查用户名是否存在
     * @param username 用户名
     * @return true 如果用户名已存在，否则 false
     */
    boolean existsByUsername(String username);

    /**
     * 检查邮箱是否存在
     * @param email 用户邮箱
     * @return true 如果邮箱已存在，否则 false
     */
    boolean existsByEmail(String email);

    /**
     * 更新用户最后登录信息
     * @param userId 用户ID
     * @param loginIp 登录IP地址
     * @return true 如果更新成功，否则 false
     */
    boolean updateLoginInfo(Long userId, String loginIp);

    /**
     * 更新用户密码
     * @param userId 用户ID
     * @param newPassword 新密码
     * @return true 如果更新成功，否则 false
     */
    boolean updatePassword(Long userId, String newPassword);
}
